#include "cpu.h"
#include "typedef.h"
#include "key_rotate_driver.h"



struct KEY_ROTATE_GPIO_S
{
    GPIO_TypeDef *GPIO1;
    u16 GPIO1_Pin;
    GPIO_TypeDef *GPIO2;
    u16 GPIO2_Pin;
};

static struct KEY_ROTATE_GPIO_S KEY_ROTATE_GPIO[KEY_ROTATE_MAX] = {\
    {GPIOC, GPIO_Pin_0, GPIOC, GPIO_Pin_1}, \
    {GPIOC, GPIO_Pin_2, GPIOC, GPIO_Pin_3}, \
    {GPIOA, GPIO_Pin_5, GPIOA, GPIO_Pin_4}, \
    {GPIOA, GPIO_Pin_7, GPIOA, GPIO_Pin_6}, \
};


void key_rotate_gpio_init(E_ROTATE index)
{
    GPIO_InitTypeDef  GPIO_InitStructure = {0};

    if (index >= KEY_ROTATE_MAX)
        return ;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

    GPIO_InitStructure.GPIO_Pin = KEY_ROTATE_GPIO[index].GPIO1_Pin;
    GPIO_Init(KEY_ROTATE_GPIO[index].GPIO1, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = KEY_ROTATE_GPIO[index].GPIO2_Pin;
    GPIO_Init(KEY_ROTATE_GPIO[index].GPIO2, &GPIO_InitStructure);
}

void key_rotate_gpio_uninit(E_ROTATE index)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    if (index >= KEY_ROTATE_MAX)
        return ;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

    GPIO_InitStructure.GPIO_Pin = KEY_ROTATE_GPIO[index].GPIO1_Pin;
    GPIO_Init(KEY_ROTATE_GPIO[index].GPIO1, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = KEY_ROTATE_GPIO[index].GPIO2_Pin;
    GPIO_Init(KEY_ROTATE_GPIO[index].GPIO2, &GPIO_InitStructure);
}

u8 key_rotate_get_pin1_state(E_ROTATE index)
{
    if (index >= KEY_ROTATE_MAX)
        return 0xff;

    return Bit_SET == GPIO_ReadInputDataBit(KEY_ROTATE_GPIO[index].GPIO1, KEY_ROTATE_GPIO[index].GPIO1_Pin);
}

u8 key_rotate_get_pin2_state(E_ROTATE index)
{
    if (index >= KEY_ROTATE_MAX)
        return 0xff;

    return Bit_SET == GPIO_ReadInputDataBit(KEY_ROTATE_GPIO[index].GPIO2, KEY_ROTATE_GPIO[index].GPIO2_Pin);
}
